home *** CD-ROM | disk | FTP | other *** search
/ Christina Milan AM to PM / Christina Milan - AM to PM.iso / christin.dir / 00021_Script_Jump to Marker Button < prev    next >
Text File  |  2001-08-09  |  11KB  |  322 lines

  1. -- DESCRIPTION --
  2.  
  3. on getBehaviorDescription
  4.   return "¼
  5. JUMP TO MARKER BUTTON"&RETURN&RETURN&"¼
  6. A click on the sprite makes the playback head jump to a chosen marker in the ¼
  7. same movie.  You can choose between:"&RETURN&"¼
  8. -> previous marker"&RETURN&"¼
  9. -> next marker"&RETURN&"¼
  10. -> any named marker in the movie"&RETURN&RETURN&"¼
  11. If more than one marker has the same name as the chosen marker, the playback ¼
  12. head will jump to the first marker with that name in the movie.  If you need ¼
  13. to use duplicate names, try adding a different number of spaces at the end of ¼
  14. each, so that they  appear the same but are in fact different."&RETURN&RETURN&"¼
  15. This behavior is designed for use with the 'Jump Back Button'.  You can set ¼
  16. it to record the frame number of the current marker so that the 'Jump Back ¼
  17. Button' can subsequently return.  NOTE: This feature relies on a global ¼
  18. variable: gNavigationButtonList."&RETURN&RETURN&"¼
  19. Use the 'Jump to Movie Button' behavior to jump to a marker in a ¼
  20. different movie."&RETURN&RETURN&"¼
  21. PERMITTED MEMBER TYPES"&RETURN&"Graphic members"&RETURN&RETURN&"¼
  22. PARAMETERS:"&RETURN&"¼
  23. * Jump to marker in this movie"&RETURN&"¼
  24. * 'Go to' or 'Play and return'?"&RETURN&"¼
  25. * Remember current marker for Back button"&RETURN&RETURN&"¼
  26. Select 'Remember current marker for Back button' to ensure that the behavior ¼
  27. 'remembers' which markers have already been visited."&RETURN&RETURN&"¼
  28. Use the associated 'Jump Back Button' behavior on a separate sprite to return ¼
  29. to visited markers in reverse order."&RETURN&RETURN&"¼
  30. ASSOCIATED BEHAVIORS:"&RETURN&"¼
  31. + Jump to Movie button"&RETURN&"¼
  32. + Jump Back Button"&RETURN&"¼
  33. + Jump Forward Button"&RETURN&"¼
  34. + Push Button (to alter rollover / mouseDown states)"
  35. end getBehaviorDescription
  36.  
  37.  
  38. on getBehaviorTooltip
  39.   return "¼
  40. Use with graphic members."&RETURN&RETURN&"¼
  41. When you drop this behavior on a sprite,"&RETURN&"¼
  42. you will be invited to choose which marker"&RETURN&"¼
  43. in the current movie to jump to on mouseUp."&RETURN&"¼
  44. You can also choose 'previous' or 'next'."&RETURN&RETURN&"¼
  45. Use this behavior with the 'Jump Back Button'"&RETURN&"¼
  46. to allow the user to return to visited"&RETURN&"¼
  47. sequences."
  48. end getBehaviorTooltip
  49.  
  50.  
  51.  
  52. -- NOTES FOR DEVELOPERS --
  53.  
  54. -- The main handler is Jump, which is triggered by mouseUp.  The Initiialize 
  55. -- handler runs a series of error-checks.  These will alert designers 
  56. -- in any of the following cases:
  57. -- * if the chosen marker has been deleted or renamed
  58. -- * if more than one marker has the same name as the chosen marker
  59. -- * if the global gNavigationButtonList does not have a valid structure
  60.  
  61. -- USE OF 'BACK/FORWARD BUTTON' BEHAVIORS
  62. -- 
  63. -- This behavior is designed to be use in collaboration with 'Jump Back' and
  64. -- 'Jump Forward' buttons so that users can retrace their steps.
  65. --
  66. -- Information about what markers have already been visited is stored in a
  67. -- global variable: gNavigationButtonList.  As a global, this variable is
  68. -- available to all navigation behaviors, on any sprite in any movie.
  69. --
  70. -- gNavigationButtonList has the following structure:
  71. --   [#stack [...], #index: [...], #forward: [...]]
  72. -- Each of the subLists has the structure:
  73. --   [[#frame: <integer>, #movie: <movieName>], [...]]
  74. --
  75. -- #index is not currently exploited.  It provides a list of all markers
  76. -- visited, in the order of their first visit.  It could be used to create
  77. -- a pop-up menu, or to check if a player had visited a particular scene.
  78. --
  79. -- Information concerning the most recently visited marker is stored in the
  80. -- last item of the #stack list.  This item is copied to a local variable, 
  81. -- then removed from the #stack.  Information concerning the current marker
  82. -- is appended to the #forward list, so that users can subsequently retrace
  83. -- their steps.
  84.  
  85.  
  86.  
  87. -- HISTORY --
  88.  
  89. -- 10 September 1998: written for the D7 Behaviors Palette by James Newton
  90. -- 22 October 1998:   "play"/"go to" added, error-checking eased to allow
  91. --                     authors to use the behavior before creating markers.
  92.  
  93.  
  94.  
  95.  
  96. -- PROPERTIES --
  97.  
  98. -- author-defined parameters:
  99. property myMarker
  100. property myJumpMode
  101. property myReturn
  102.  
  103. -- global gNavigationButtonList -- Only declared if it is to be used
  104.  
  105.  
  106. -- EVENT HANDLERS --
  107.  
  108. on beginSprite me
  109.   Initialize me
  110. end beginSprite
  111.  
  112. on mouseUp me
  113.   Jump me
  114. end prepareFrame
  115.  
  116.  
  117. -- CUSTOM HANDLERS --
  118.  
  119. on Initialize me -- sent BY beginSprite  
  120.   -- Error checking: Marker name
  121.   if not getPos ([#next, #previous, #loop], myMarker) then
  122.     -- Does myMarker still exist?
  123.     theMarkerList = RETURN&the labelList
  124.     markerExists = offset (RETURN&myMarker&RETURN, theMarkerList)
  125.     if not markerExists then
  126.       ErrorAlert me, #markerMissing, myMarker
  127.     else
  128.       -- Is myMarker still unique?
  129.       delete char 1 to markerExists of theMarkerList
  130.       if offset (RETURN&myMarker&RETURN, theMarkerList) then
  131.         ErrorAlert me, #runtime_DuplicateMarkers, myMarker
  132.       end if
  133.     end if
  134.   end if
  135.   
  136.   -- Error checking: Global variable
  137.   if myReturn then
  138.     global gNavigationButtonList -- Only declared if it is to be used
  139.     
  140.     if voidP (gNavigationButtonList) then
  141.       -- Initialize gNavigationButtonList
  142.       gNavigationButtonList = [#stack: [], #forward: [], #index: []]
  143.     else -- Is it the right global?
  144.       if gNavigationButtonList.ilk <> #propList then
  145.         ErrorAlert (me, #invalidGlobal, gNavigationButtonList)
  146.       else if not gNavigationButtonList.findPos(#stack) then
  147.         ErrorAlert (me, #invalidGlobal, gNavigationButtonList)
  148.       else if not gNavigationButtonList.findPos(#index) then
  149.         ErrorAlert (me, #invalidGlobal, gNavigationButtonList)
  150.       else if not gNavigationButtonList.findPos(#forward) then
  151.         ErrorAlert (me, #invalidGlobal, gNavigationButtonList)
  152.       end if
  153.     end if
  154.   end if
  155.   -- End of error checking
  156. end Initialize
  157.  
  158.  
  159. on Jump me -- sent by mouseUp
  160.   case myMarker of 
  161.     #previous:targetIsNewMarker = (marker (-the maxInteger / 2) <> marker (0))
  162.     #loop:    targetIsNewMarker = FALSE
  163.     #next:    targetIsNewMarker = (marker (0) <> marker (the maxInteger / 2))
  164.     otherwise
  165.       targetIsNewMarker = (marker (0) <> marker (myMarker))
  166.   end case
  167.   
  168.   if myReturn and targetIsNewMarker then
  169.     -- Remember where to come back to
  170.     global gNavigationButtonList -- Only declared if it is to be used
  171.     
  172.     currentMarker = [#frame: marker (0), #movie: the movieName]
  173.     -- Add currentMarker to #stack
  174.     gNavigationButtonList.stack.append(currentMarker)
  175.     -- Check if currentMarker is already in #index
  176.     if not gNavigationButtonList.index.getPos(currentMarker) then
  177.       gNavigationButtonList.index.append(currentMarker)
  178.     end if
  179.     -- Empty #forward list
  180.     gNavigationButtonList.forward = []
  181.   end if
  182.   
  183.   -- Go to frame indicated by myMarker
  184.   if myJumpMode  = "Go to" then
  185.     case myMarker of
  186.       #previous: go previous
  187.       #loop:     go loop
  188.       #next:     go next
  189.       otherwise
  190.         go marker (myMarker)
  191.     end case
  192.   else -- play => play done
  193.     case myMarker of
  194.       #previous: play marker (-1)
  195.       #loop:     play marker (0)
  196.       #next:     play marker (1)
  197.       otherwise:
  198.         play myMarker    
  199.     end case
  200.   end if
  201. end Jump
  202.  
  203.  
  204.  
  205. -- ERROR CHECKING --
  206.  
  207. on ErrorAlert me, theError, data
  208.   -- Send by getPropertyDescriptionList, initialize
  209.   -- Determine the behavior's name
  210.   behaviorName = string (me)
  211.   delete word 1 of behaviorName
  212.   delete the last word of behaviorName
  213.   delete the last word of behaviorName
  214.   -- Convert #data to useful value
  215.   case data.ilk of
  216.     #void: data = "<void>"
  217.     #symbol: data = "#"&data
  218.   end case
  219.   
  220.   case theError of
  221.       
  222.     #getPDL_DuplicateMarkers:
  223.       alert "¼
  224. Two or more markers in this movie have the same name.  This could lead to ¼
  225. confusion if you use this behavior to go to a named marker."&RETURN&RETURN&"¼
  226. Duplicate marker(s) = "&data
  227.       
  228.     #markerMissing:
  229.       if the runMode = "Author" then
  230.         alert "¼
  231. BEHAVIOR ERROR: Frame "&the frame&", Sprite "&me.spriteNum&RETURN&"¼
  232. Behavior "&behaviorName&RETURN&RETURN&"¼
  233. The chosen marker no longer exists.  ¼
  234. Choose a valid marker in the Behavior Parmeters dialog."&RETURN&RETURN&"¼
  235. Current marker = "&data
  236.       end if
  237.       abort
  238.       
  239.     #runtime_DuplicateMarkers:
  240.       if the runMode = "Author" then
  241.         alert "¼
  242. BEHAVIOR ERROR: Frame "&the frame&", Sprite "&me.spriteNum&RETURN&"¼
  243. Behavior "&behaviorName&RETURN&RETURN&"¼
  244. The chosen marker does not  have a unique name.  The playback head will jump ¼
  245. to the first marker with this name:"&RETURN&RETURN&"¼
  246. Duplicate marker name = "&data
  247.       end if
  248.       
  249.     #invalidGlobal:
  250.       alert "¼
  251. BEHAVIOR ERROR: Frame "&the frame&", Sprite "&me.spriteNum&RETURN&"¼
  252. Behavior "&behaviorName&RETURN&RETURN&"¼
  253. Behavior "&behaviorName&" requires a global gNavigationButtonList with the ¼
  254. structure:"&RETURN&"¼
  255. [#stack [...], #index: [...], #forward: [...]]"&RETURN&RETURN&"¼
  256. Current value = "&data
  257.       halt
  258.       
  259.   end case
  260. end ErrorAlert
  261.  
  262.  
  263. -- AUTHOR-DEFINED PARAMETERS --
  264.  
  265. on getPropertyDescriptionList me
  266.   
  267.   if not the currentSpriteNum then exit
  268.   currentMember = sprite(the currentSpriteNum).member
  269.   
  270.   markersList = GetMarkers (me)
  271.   if markersList.count() = 2 then -- [[<markers>], [<duplicates>]]
  272.     ErrorAlert (me, #getPDL_DuplicateMarkers, markersList[2])
  273.   end if
  274.   
  275.   return ¼
  276. [ ¼
  277.  #myMarker: ¼
  278.  [ ¼
  279.   #comment: "On mouseUp, jump to marker:", ¼
  280.   #format:  #marker, ¼
  281.   #default: #next ¼
  282.  ], ¼
  283.  #myJumpMode: ¼
  284.  [ ¼
  285.   #comment: "Jump Mode:", ¼
  286.   #format:  #string, ¼
  287.   #range:  ["Go to", "Play and Return"], ¼
  288.   #default: "Go to" ¼
  289.  ], ¼
  290.  #myReturn: ¼
  291.  [ ¼
  292.   #comment: "Remember current marker for Back button?", ¼
  293.   #format:  #boolean, ¼
  294.   #default:  TRUE ¼
  295.  ] ¼
  296. ]
  297. end getPropertyDescriptionList
  298.  
  299.  
  300. on GetMarkers me -- Sent by getPropertyDescriptionList
  301.   localMarkerList = []
  302.   duplicatesList = []
  303.   markerString = the labelList
  304.   delete the last char of markerString
  305.   markerCount = the number of lines of markerString
  306.   repeat with i = 1 to markerCount
  307.     theMarker = markerString.line [i]
  308.     if localMarkerList.getPos(theMarker) then
  309.       -- Duplicate marker name
  310.       if not duplicatesList.getPos(theMarker) then
  311.         duplicatesList.append(theMarker)
  312.       end if
  313.     else
  314.       localMarkerList.append(theMarker)
  315.     end if
  316.   end repeat
  317.   if duplicatesList.count() then
  318.     return [localMarkerList, duplicatesList]
  319.   else
  320.     return [localMarkerList] 
  321.   end if
  322. end GetMarkers